﻿using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using ControleEstoque.Entidades.ControleAtivoDataSetTableAdapters;
using System.Web.Security;
using System.Xml;
using System.Xml.Xsl;
using System.Text;

/// <summary>
/// Summary description for Services
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class Services : System.Web.Services.WebService
{
	#region Ativo

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.AtivoDataTable Ativo_GetDataWithFabricanteAtivoNomeAndTipoAtivoNome()
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		AtivoTableAdapter _adapter = new AtivoTableAdapter();
		ControleEstoque.Entidades.ControleAtivoDataSet.AtivoDataTable ativos = _adapter.GetDataWithFabricanteAtivoNomeAndTipoAtivoNome();
		return _adapter.GetDataWithFabricanteAtivoNomeAndTipoAtivoNome();
	}

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.AtivoDataTable Ativo_GetDataByAtivoRFIDs(params string[] AtivoRFIDs)
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		AtivoTableAdapter _adapter = new AtivoTableAdapter();
		ControleEstoque.Entidades.ControleAtivoDataSet.AtivoDataTable ativoData = _adapter.GetData();

		var ativosNotIn = from row in ativoData where !AtivoRFIDs.Contains<string>(row.AtivoRFID) select row;

		foreach (ControleEstoque.Entidades.ControleAtivoDataSet.AtivoRow row in ativosNotIn)
		{
			ativoData.RemoveAtivoRow(row);
		}

		return ativoData;
	}

	[WebMethod]
	public int Ativo_Insert(int tipoAtivoId, int fabricanteAtivoId, string ativoNome, string ativoRFID)
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		AtivoTableAdapter ativoAdapter = new AtivoTableAdapter();
		return ativoAdapter.Insert(tipoAtivoId, fabricanteAtivoId, ativoNome, ativoRFID);
	}

	[WebMethod]
	public int Ativo_Update(int tipoAtivoId, int fabricanteAtivoId, string ativoNome, string ativoRFID, int original_AtivoId)
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		AtivoTableAdapter ativoAdapter = new AtivoTableAdapter();
		return ativoAdapter.Update(tipoAtivoId, fabricanteAtivoId, ativoNome, ativoRFID, original_AtivoId);
	}

	[WebMethod]
	public int Ativo_Delete(int original_AtivoId)
	{
		AtivoTableAdapter ativoAdapter = new AtivoTableAdapter();
		return ativoAdapter.Delete(original_AtivoId);
	}

	#endregion Ativo

	#region FabricanteAtivo

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.FabricanteAtivoDataTable FabricanteAtivo_GetData()
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		FabricanteAtivoTableAdapter _adapter = new FabricanteAtivoTableAdapter();
		return _adapter.GetData();
	}

	#endregion FabricanteAtivo

	#region LocalArmazenagem

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.LocalArmazenagemDataTable LocalArmazenagem_GetData()
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		LocalArmazenagemTableAdapter _adapter = new LocalArmazenagemTableAdapter();
		return _adapter.GetData();
	}

	#endregion LocalArmazenagem

	#region PortalLeitor

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.PortalLeitorDataTable PortalLeitor_GetData()
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		PortalLeitorTableAdapter _adapter = new PortalLeitorTableAdapter();
		return _adapter.GetData();
	}

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.PortalLeitorDataTable PortalLeitor_GetByLocalArmazenagemId(int localArmazenagemId)
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		PortalLeitorTableAdapter _adapter = new PortalLeitorTableAdapter();
		return _adapter.GetDataByLocalArmazenagemId(localArmazenagemId);
	}

	#endregion PortalLeitor

	#region TipoAtivo

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.TipoAtivoDataTable TipoAtivo_GetData()
	{
		//if (!Context.User.Identity.IsAuthenticated)
		//{
		//    throw new Exception("Usuário não está autenticado.");
		//}
		TipoAtivoTableAdapter _adapter = new TipoAtivoTableAdapter();
		return _adapter.GetData();
	}

	#endregion TipoAtivo

	#region Usuario

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.UsuarioDataTable Usuario_VerificarUsuarioSenha(string usuarioMatricula, string usuarioSenha)
	{
		UsuarioTableAdapter _adapter = new UsuarioTableAdapter();
		ControleEstoque.Entidades.ControleAtivoDataSet.UsuarioDataTable usuarioData = _adapter.VerificarUsuarioSenha(usuarioMatricula, usuarioSenha);
		if (usuarioData.Count > 0)
		{
			if (usuarioData[0].UsuarioTipo == "O")
			{
				FormsAuthentication.SetAuthCookie(usuarioMatricula, false);
			}
			else
			{
				usuarioData.Clear();
			}

		}
		return usuarioData;

	}

	#endregion Usuario

	#region Movimentacao

	[WebMethod]
	public ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoDataTable Movimentacao_GetDataFromPortalLeitor(int portalLeitorId, byte antena, string movimentacaoTipo)
	{
		using (MovimentacaoTableAdapter adapter = new MovimentacaoTableAdapter())
		{
			return adapter.GetDataFromPortalLeitor(portalLeitorId, antena, movimentacaoTipo);
		}
	}

	[WebMethod]
	public int Movimentacao_Update(ControleEstoque.Entidades.ControleAtivoDataSet.MovimentacaoDataTable data)
	{
		using (MovimentacaoTableAdapter adapter = new MovimentacaoTableAdapter())
		{
			return adapter.Update(data);
		}
	}

	#endregion Movimentacao

	#region EstoqueLocalizacao

	[WebMethod]
	public string EstoqueLocalizacao_ConsultarEstoque(int? ativoId, int? localArmazenagemId, string estoqueLocalizacaoRFID, DateTime? movimentacaoDataInicial, DateTime? movimentacaoDataFinal)
	{
		using (EstoqueLocalizacaoTableAdapter adapter = new EstoqueLocalizacaoTableAdapter())
		{
			XmlDocument xDoc = new XmlDocument();
			string content = adapter.ConsultarEstoque(ativoId, localArmazenagemId, estoqueLocalizacaoRFID, movimentacaoDataInicial, movimentacaoDataFinal).ToString();
			xDoc.LoadXml(content);

			XslCompiledTransform transform = new XslCompiledTransform(true);
			transform.Load(Server.MapPath("~/Transformers/Transform.xslt"));

			StringBuilder sbResult = new StringBuilder();
			XmlWriter xWriter = XmlWriter.Create(sbResult);
			transform.Transform(xDoc, xWriter);
			xWriter.Close();

			return sbResult.ToString();
		}
	}

	#endregion EstoqueLocalizacao

}

